// 虚拟代理合并HTTP请求
// 假设我们在做一个文件同步的功能， 当我们选中一个 checkbox 的时候，
// 它对应的文件就会被同 步到另外一台备用服务器上面。 当一次选中过多时，
// 会产生频繁的网络请求。 将带来很大的开销。 
// 可以通过一个代理函数 proxySynchronousFile 来收集一段时间之内的请求， 
// 最后一次性发送给服务器

var synchronousFile = function(id) {
    console.log('开始同步文件，id 为: ' + id);
};
var proxySynchronousFile = (function() {
    var cache = [], // 保存一段时间内需要同步的 ID
        timer; // 定时器
    return function(id) {
            cache.push(id);
            if (timer) { // 保证不会覆盖已经启动的定时器
                return;
            }
            timer = setTimeout(function() {
                synchronousFile(cache.join(','));
                clearTimeout(timer); // 清空定时器 
                timer = null;
                cache.length = 0; // 清空 ID 集合
            }, 2000);
        } // 2 秒后向本体发送需要同步的 ID 集合
})();

var checkbox = document.getElementsByTagName('input');
for (var i = 0, c; c = checkbox[i++];) {
    c.onclick = function() {
        if (this.checked === true) {
            proxySynchronousFile(this.id);
        }
    }
};